package com.zxl.study.confusion;

import java.util.List;

/**
 * @auther zxl
 * @create 2023-08-12 19:12
 */
public class SaveOrderServiceImpl_V1
{
    /**
     * 处理客户下单的业务
     * @param orderMainModel 订单主记录，相关的数据对象
     * @param orderDetailModelList 订单明细，对应的多个订单明细记录的数据对象的list
     * @return 主订单的uuid
     */
    public Long saveSaleOrder(OrderMainModel orderMainModel, List<OrderDetailModel> orderDetailModelList)
    {
        //1：保存订单的主记录，得到主记录的uuid
        //OrderDao.create(orderMainModel);
        //2：保存订单明细记录
        //2.1：循环设置每个DetailModel，设置他们所属的orderMainUuid
        //2.2：批量保存多条明细记录

        //3：判断是否需要客户方进行采购订单的审核
        //调用：CustomerCenter4OrderApi.judgeOrderNeedAudit()


        if(true)
        {
            //4：如果需要客户审核
            //4.1：设置订单状态为待客户审核
            //4.2：自动生成相应的采购审核单
            //调用：CustomerCenter4OrderApi.genOrderAuditSheet

            //4.3：记录订单的操作日志

            //此时认为订单并未下单完全成功，所以不用发出事件
            //后续的业务，要等用户审核完成后，回调订单提供的方法，再进行后续的业务操作
        }else{
            //5：如果不需要客户审核
            //5.1：判断客户是现结客户还是月结客户
            //调用：PayAndFinanceCenter4OrderApi.getCustomerSettlementType()
            boolean month = true;
            if(month){
                //5.2：如果是月结客户，就自动支付
                //调用：PayAndFinanceCenter4OrderApi.monthSettlementCustomerAutoPay
                //有两种情况，一种是支付完全成功；另外一种是额度不足，只做了部分支付
                //5.3：判断是否支付完全成功
                boolean autoPayOk = true;
                if(autoPayOk){
                    //5.4：完全支付成功，记录订单操作日志，支付完成后回修改订单状态

                    //6：自动进行拆单
                    //这就要求在订单的数据结构上添加：订单 主子类型、所属的主订单的uuid
                    //6.1：先按照税点进行拆单（税点可以是从前端传过来点，也可以后台重新到商品中心去获取）
                    //拆分到结果，放在内存里面，先不要保存，等到最后完全拆单完成后，再一次性的批量保存
                    //6.2：获取客户配置的拆单规则
                    //调用：CustomerCenter4OrderApi.getOrderSplitConfig

                    //6.3：判断是否还需要继续拆分，如果需要
                    if(true){
                        //6.4：继续按照设置的规则进行拆分，（目前主要是按照会计科目进行拆单，会计科目数据从前端传过来）
                    }

                    //6.5：整体保存拆单的结果
                    //6.5.1：先批量保存主订单记录，获取返回结果，里面有对应的OrderMainUuid
                    //6.5.2：循环设置相应的OrderDetailModel里面的OrderMainUuid
                    //6.5.3：批量保存拆分出来的OrderDetail

                    //6.6：记录订单操作日志，主子订单都一并记录下来

                    //7：表示订单支付完成后的处理也完成了，发出事件：下单成功，以驱动后续的业务处理
                }
            }
        }

        //8：如果是现结客户，或者是月结支付额度不足，需要现金支付
        boolean cashOrSupplyMonth = true;

        if(cashOrSupplyMonth)
        {
            //8.1：创建现金支付单
            //调用：PayAndFinanceCenter4OrderApi.createPaySheet
        }

        return 0L;
    }
}
